Out-of-order execution (also known as dynamic execution) of instructions allow instructions to be executed in a processor based on resource availability and not entirely tied to program order. In this fashion, the processor can minimize idle time that occurs while waiting for preceding instructions to complete. This out-of-order execution extends to several types of instructions, including load instructions. For example, a load instruction in a program may be fetched, decoded, and executed before other instructions that precede the load instruction in the original program order. The load instruction will remain in the processor until preceding instructions are executed such that the processor may determine whether the out-of-order load instruction was correctly executed.
Once the out-of-order load instruction is determined to have been properly executed, the load instruction may be retired. However, a load fault may occur to a load instruction at any time between execution and retirement. These load faults may be caused by external snoop hits, memory disambiguation misprediction, memory renaming mismatch, or other similar events.
Normally the above load faults are reported at retirement of the load instruction and are resolved only after a store buffer drain occurs. Namely, a fault is determined after all older instructions have been executed and the out-of-order load instruction is re-executed with up-to-date inputs. Accordingly, when load faults are reported and corrected at retirement, the benefits of out-of-order execution are nullified since at that point all preceding instructions have already executed and the load instruction is now being executed in program order.
In contrast to detection and re-fetched of out-of-order faulted loads, mis-predicted branches implement a scheme called instant reclamation. Instant reclamation allows faults associated with mis-predicted branch instructions to be detected at execution and re-fetched for execution before retirement. However, instant reclamation is not unavailable at this time for load instructions.